# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/8/10 0010 21:42
@Author : 测试开发工程师
@File : 3. jenkinsfile 语法.py
@Software: PyCharm
============================
"""

"""
jenkinsfile 语法简介：
    Declarative pipeline  - v2.5 之后引入，结构化方式
    Scripts pipeline  - 基于 groovy 的语法(简洁)
    
Jenkinsfile 语法 Declarative pipeline
    必须包含在一个 pipeline 块内，具体来说是：pipeline { }
    基本的部分是"steps"，steps 告诉 Jenkins 要做什么
    语句分类具体包含 Sections，Directives，Steps 赋值等几大类
    
    pipeline：块名字
    agent : 定义 pipeline 执行节点
    参数：
        必须出现的指令
        any : 可以在任意 agent 上执行 pipeline
        none : pipeline 将不分配全局 agent,每个 stage 发配自己的 agent
        lable : 指定运行节点的 Lable 
        node : 自定义运行节点配置
            指定 lable
            指定 customWorkspace
        docker : 控制目标节点上的 docker 运行相关内容
    
    示例：
            
        pipeline {
            agent{
                node{
                    label "myslave"
                    customWorkspace "myWorkspace"
                    }
                }
        }
        
    stages : 包含一个或多个 stage 的序列，Pipeline 的大部分工作在此执行
        必须出现的指令
        无参数
        每个 pipeline 代码区间必须只有一个 stages
    stage : 包含在 stages 中，pipeline 完成的所有实际工作都需要包含到 stage 中
        必须出现的指令
        无参数
        需要定义 stage 的名字
    steps:
        必须出现的指令
        无参数
        具体执行步骤，包含在 stage 代码区间中
        
    示例代码：
        stages{
            stage('git pull souce code')
                step{
                    echo "sysn updataed code"
                    git "https://github.com/princeqjzh/iPipeline.git"}
                    }
            }
        }

Jenkinsfile 语法 Declarative pipeline 
    post: 定义 Pipeline 或 stage 运行 结束时的操作
    参数
        不是必须出现的指令
        always ： 无论 Pipeline 运行的完成状态如何都会运行
        changed : 只有当前 Pipeline 运行的状态与先前完成的 Pipeline 的状态不同时，才能运行
        failure : 仅当当前 Pipeline 处于 失败 状态时才运行
        success： 仅当当前 Pipeline 具有 成功 状态时才运行
        unstable : 只有当前 Pipeline 具有 不稳定 状态才能运行
        aborted:  只有当前 Pipeline 处于 中止 状态时才能运行
        

    Declarative pipeline 示例代码：（success成功时打印，always总会打印）
    post{
        success{
            echo 'goodbye pipeline success!'
            sleep 2}
        }
        always{
            echo 'always say goodbye'
            
        }
    }


Jenkinsfile 语法 Scripts pipeline
    基于 groovy 的语法定制的一种 DSL 语言
        灵活性高
        可扩展性更好
        Scripts pipeline 与 Declarative pipeline 程序构成方式有雷同之处，基本语法也有相似之处
    
    
"""
